package cn.com.sinosoft.exam.controller;

import java.util.Date;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import cn.com.sinosoft.exam.annotation.PageParamer;
import cn.com.sinosoft.exam.model.Follow;
import cn.com.sinosoft.exam.model.Patient;
import cn.com.sinosoft.exam.page.PageParam;
import cn.com.sinosoft.exam.service.PatientService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;

/**
 * 患者管理控制器
 *
 * @author xl
 */
@Slf4j
@RestController
@RequestMapping("/patient")
@Api(tags = "患者管理Api")
public class PatientController {

    @Autowired
    PatientService patientService;

    /**
     * 临时生成Model属性说明使用
     * 忽略该方法
     *
     * @param
     * @return
     */
    @ApiOperation(value = "查询患者列表", hidden = true)
    @GetMapping("/temp")
    ResponseEntity<?> temp(@RequestBody Patient patient, @RequestBody Follow follow) {
        return null;
    }

    /**
     * 分页示例
     * 查询患者列表
     *
     * @param params
     * @return
     */
    @ApiOperation("查询患者列表")
    @GetMapping("/page")
    ResponseEntity<?> pagePatient(@ApiParam("查询条件") @RequestParam Map<String, Object> params,
                                  @PageParamer PageParam pageParam) {
        log.info("查询患者列表：{}", params);
        return ResponseEntity.ok(patientService.page(params, pageParam));
    }


    /**
     * 删除患者信息
     *
     * @param id
     * @return
     */
    @DeleteMapping("/delete/{id}")
    ResponseEntity<?> delPatient(@PathVariable("id") Long id) {
        try {
            return ResponseEntity.ok(patientService.delPatient(id));
        } catch (Exception e){
            e.printStackTrace();
            return ResponseEntity.ok(0);
        }
    }

    /**
     * 新增记录
     *
     * @param patient
     * @return
     */
    @PostMapping("/add")
    ResponseEntity<?> addPatient(@RequestBody Patient patient) {
        try {
            patient.setDtCreate(new Date());
            patient.setIfDel(0);
            return ResponseEntity.ok(patientService.addPatient(patient));
        } catch (Exception e){
            e.printStackTrace();
            return ResponseEntity.ok(0);
        }
    }

    /**
     * 修改信息
     *
     * @param patient
     * @return
     */
    @PutMapping("/update")
    ResponseEntity<?> upPatient(@RequestBody Patient patient) {
        System.out.println(patient);
        try {
            return ResponseEntity.ok(patientService.upPatient(patient));
        } catch (Exception e){
            e.printStackTrace();
            return ResponseEntity.ok(0);
        }
    }


    /**
     * 功能描述: 1、	在现有项目服务中增加一个患者最新访视查询服务，
     * 查询条件为患者所在机构，查询该机构下患者最近一个月存在访视记录的患者信息列表
     * （实现分页：参照分页示例PatientController下的 pagePatient方法），按最新随访日期排序。
     * 服务名称   patient/queryOneMonthInterview 请求方式 GET
     * 返回PageInfo<Patient>
     *
     * @return org.springframework.http.ResponseEntity<?>
     * @author XiaoLin
     * @date 2019/1/26 14:31
     */
    @GetMapping("/queryOneMonthInterview")
    ResponseEntity<?> queryOneMonthInterview(String orgcode, @PageParamer PageParam pageParam) {
        return ResponseEntity.ok(patientService.queryOneMonthInterview(orgcode, pageParam));
    }

    /**
     * 2、	在现有项目服务中增一个患者更新服务，更新条件为患者机构，
     * 更新当前机构下所有患者建档时间为2018年1月1日以后的且存在访视记录的患者，
     * 建档时间为2019年1月1日。
     * 服务名  patient/updatePatient 请求方式 Patch
     * 返回对象为 int 即为成功更新条数。
     */
    @PutMapping("/updatePatient/{orgcode}")
//    @PatchMapping("/updatePatient")
    ResponseEntity<?> updatePatient(@PathVariable("orgcode") String orgcode) {
        return ResponseEntity.ok(patientService.updatePatient(orgcode));
    }


}
